home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / m2 / cat3src / magic / rsccoder.m < prev    next >
Text File  |  1997-10-26  |  12KB  |  285 lines

  1. MODULE RscCoder;
  2.  
  3. (* Wandelt ein RSC-File in formatierten Text.
  4.  * Fr MM2 als initialisiertes Konstanten-Feld, fr andere Compiler als
  5.  * CODE- bzw. INLINE-Prozedur.  Ein solches RSC-File kann dann mittels
  6.  * mtRsc.RelocRsc wie ein normales RSC-File geladen werden. So ist es
  7.  * m”glich, Resourcen im Programmcode zu halten, ohne eigenes RSC-File
  8.  * benutzen zu mssen.
  9.  *)
  10.  
  11. IMPORT SYSTEM;
  12. IMPORT MagicSys, MagicAES, MagicConvert, MagicStrings, MagicDOS;
  13. IMPORT mtDir, mtFiles, mtAppl, mtTextfiles, mtTime, mtRsc, mtDials, mtUtils;
  14.  
  15. (*----------------------------------------------------------------------*
  16.  *        Resource-Coder 1.03  (C)92 by Peter Hellinger Software        *
  17.  *----------------------------------------------------------------------*
  18.  *           Inline-Resource erzeugt am 10.02.1992 17:01:30             *
  19.  *----------------------------------------------------------------------*)
  20.  
  21. TYPE tRscData = ARRAY [0..281] OF CARDINAL;
  22.  
  23. CONST RscData = tRscData {
  24.         00001H, 0013EH, 00122H, 0013EH, 00122H, 00122H, 00024H, 00122H, 00122H, 
  25.         0022EH, 0000AH, 00001H, 00001H, 00000H, 00000H, 00000H, 00000H, 00232H, 
  26.         05253H, 0432DH, 0436FH, 06465H, 07220H, 0312EH, 03033H, 02020H, 02045H, 
  27.         0696EH, 0204DH, 06167H, 06963H, 04C69H, 0622DH, 0546FH, 06F6CH, 00028H, 
  28.         04329H, 03139H, 03932H, 02046H, 05245H, 04557H, 04152H, 04520H, 04259H, 
  29.         02050H, 04554H, 04552H, 02048H, 0454CH, 04C49H, 04E47H, 04552H, 02053H, 
  30.         04F46H, 05457H, 04152H, 04500H, 00000H, 0496EH, 06974H, 06961H, 06C69H, 
  31.         07369H, 06572H, 07465H, 0205BH, 04B6FH, 06E73H, 07461H, 06E74H, 06520H, 
  32.         0286EH, 07572H, 02066H, 08172H, 0204DH, 04D32H, 02900H, 05072H, 06F7AH, 
  33.         06564H, 07572H, 0206DH, 06974H, 0205BH, 0434FH, 04445H, 02D53H, 07461H, 
  34.         07465H, 06D65H, 06E74H, 07320H, 02866H, 08172H, 02054H, 04449H, 02900H, 
  35.         05072H, 06F7AH, 06564H, 07572H, 0206DH, 06974H, 0205BH, 0494EH, 04C49H, 
  36.         04E45H, 02D53H, 07461H, 07465H, 06D65H, 06E74H, 07320H, 0284CH, 05052H, 
  37.         02F53H, 05043H, 02900H, 0415BH, 05252H, 04159H, 0206DH, 06974H, 02049H, 
  38.         06E69H, 07469H, 0616CH, 06973H, 06965H, 07275H, 06E67H, 0732DH, 05072H, 
  39.         06F7AH, 06564H, 07572H, 0005BH, 04F6BH, 0005BH, 04162H, 06272H, 07563H, 
  40.         06800H, 00000H, 00047H, 00000H, 00074H, 00000H, 00075H, 00005H, 00006H, 
  41.         00002H, 00200H, 00000H, 0FFFFH, 0002DH, 00001H, 0FFFFH, 00001H, 00009H, 
  42.         00014H, 00000H, 00010H, 00002H, 01100H, 00001H, 00001H, 00030H, 0000FH, 
  43.         00002H, 0FFFFH, 0FFFFH, 01119H, 00000H, 00010H, 00001H, 01100H, 0002EH, 
  44.         00000H, 00002H, 00001H, 00003H, 0FFFFH, 0FFFFH, 0131CH, 00000H, 00010H, 
  45.         00000H, 00024H, 00002H, 00001H, 0002BH, 00001H, 00004H, 0FFFFH, 0FFFFH, 
  46.         00015H, 00000H, 00000H, 00000H, 00122H, 00002H, 00602H, 00021H, 00001H, 
  47.         00005H, 0FFFFH, 0FFFFH, 0121AH, 00015H, 00001H, 00000H, 00076H, 00002H, 
  48.         00004H, 0002BH, 00001H, 00006H, 0FFFFH, 0FFFFH, 0121AH, 00015H, 00000H, 
  49.         00000H, 0009EH, 00002H, 00006H, 0002BH, 00001H, 00007H, 0FFFFH, 0FFFFH, 
  50.         0121AH, 00015H, 00000H, 00000H, 000C6H, 00002H, 00008H, 0002BH, 00001H, 
  51.         00008H, 0FFFFH, 0FFFFH, 0121AH, 00015H, 00000H, 00000H, 000F0H, 00002H, 
  52.         0000AH, 0002BH, 00001H, 00009H, 0FFFFH, 0FFFFH, 0121AH, 00007H, 00000H, 
  53.         00000H, 00115H, 00015H, 0000DH, 0000BH, 00001H, 00000H, 0FFFFH, 0FFFFH, 
  54.         0121AH, 00425H, 00000H, 00000H, 00119H, 00022H, 0000DH, 0000BH, 00001H, 
  55.         00000H, 0013EH, 00000H
  56.         }; (* Ende RscData *)
  57. (*----------------------------------------------------------------------*)
  58.  
  59. CONST
  60.   Main     =   0;  (* Formular/Dialog *)
  61.   Formm2   =   4;  (* BUTTON in Baum MAIN *)
  62.   Fortdi   =   5;  (* BUTTON in Baum MAIN *)
  63.   Forother =   6;  (* BUTTON in Baum MAIN *)
  64.   Forarray =   7;  (* BUTTON in Baum MAIN *)
  65.   Ok       =   8;  (* BUTTON in Baum MAIN *)
  66.   Cancel   =   9;  (* BUTTON in Baum MAIN *)
  67.  
  68.  
  69.  
  70.  
  71. TYPE    tCompiler =     (mm2, tdi, array, other);
  72.  
  73. VAR     Resource:       ARRAY [0..07FFFH] OF CARDINAL; (* 64kb *)
  74.  
  75.         inFile:         ARRAY [0..255] OF CHAR;
  76.         inPath:         ARRAY [0..255] OF CHAR;
  77.         inName:         ARRAY [0..14] OF CHAR;
  78.         inSuff:         ARRAY [0..5] OF CHAR;
  79.  
  80.         outFile:        ARRAY [0..255] OF CHAR;
  81.         outPath:        ARRAY [0..255] OF CHAR;
  82.         outName:        ARRAY [0..14] OF CHAR;
  83.         outSuff:        ARRAY [0..5] OF CHAR;
  84.  
  85.         str:            ARRAY [0..255] OF CHAR;
  86.         in:             mtFiles.FILE;
  87.         inBytes:        LONGCARD;
  88.         out:            mtTextfiles.TEXTFILE;
  89.         i, j, n, t, d:  CARDINAL;
  90.         b:              BOOLEAN;
  91.  
  92. VAR     rsc:            mtRsc.RESOURCE;
  93.         main:           mtUtils.tObjcTree;
  94.         clip:           mtUtils.tRect;
  95.         rect:           mtUtils.tRect;
  96.         compiler:       tCompiler;
  97.         objc:           INTEGER;
  98.  
  99.         
  100.  
  101. PROCEDURE WriteHex (num: CARDINAL);
  102. VAR str: ARRAY [0..10] OF CHAR;
  103.     i: CARDINAL;
  104. BEGIN
  105.  MagicConvert.NumToStr (LONG(num), 4, 16, FALSE, str);
  106.  FOR i:= 0 TO LENGTH (str) DO
  107.   IF str[i] = ' ' THEN  str[i]:= '0';  END;
  108.  END;
  109.  mtTextfiles.WriteConst (out, '0');
  110.  mtTextfiles.WriteLine (out, str);
  111.  mtTextfiles.WriteConst (out, 'H');
  112. END WriteHex;
  113.  
  114. PROCEDURE WriteLine (REF str: ARRAY OF CHAR; newline: BOOLEAN);
  115. BEGIN
  116.  mtTextfiles.WriteConst (out, str);
  117.  IF newline THEN  mtTextfiles.WriteLn (out);  END;
  118. END WriteLine;
  119.  
  120. BEGIN
  121.  compiler:= mm2;
  122.  mtAppl.MouseBusy;
  123.  rect.x:= (mtAppl.MaxWidth DIV 2) - mtAppl.BoxWidth;
  124.  rect.y:= (mtAppl.MaxHeight DIV 2) - mtAppl.BoxHeight;
  125.  rect.w:= mtAppl.BoxWidth * 2;
  126.  rect.h:= mtAppl.BoxHeight * 2;
  127.  IF NOT mtRsc.RelocRsc (SYSTEM.CADR (RscData), rsc) THEN
  128.   mtAppl.ApplTerm (-1);
  129.  END;
  130.  mtAppl.MouseArrow;
  131.  mtAppl.MouseOn;
  132.  MagicAES.WindUpdate (MagicAES.BEGUPDATE);
  133.  main:= mtRsc.GaddrRsc (rsc, MagicAES.RTREE, Main);
  134.  IF NOT mtDials.NewDial (main) THEN  mtAppl.ApplTerm (-1);  END;
  135.  mtDials.DialCenter (main, mtDials.CSCREEN, 0, 0, clip);
  136.  mtDials.DialForm (main, mtDials.DGROW, rect, clip);
  137.  mtDials.DialForm (main, mtDials.DSTART, clip, clip);
  138.  mtDials.DialDraw (main, 0, 8, clip, FALSE);
  139.  LOOP
  140.   mtAppl.MouseArrow;
  141.   objc:= mtDials.DialDo (main, -1);
  142.   b:= mtUtils.DoubleClick (objc);
  143.   IF objc = Formm2 THEN      compiler:= mm2;
  144.   ELSIF objc = Fortdi THEN   compiler:= tdi;
  145.   ELSIF objc = Forother THEN compiler:= other;
  146.   ELSIF objc = Forarray THEN compiler:= array;
  147.   ELSIF objc = Cancel THEN   EXIT;
  148.   ELSIF objc = Ok THEN
  149.    mtAppl.MouseOn;
  150.    IF mtDir.GetDir (inPath, inName, 'Resource w„hlen') THEN
  151.     MagicStrings.Assign (inPath, inFile);
  152.     mtDir.DelTail (inFile);
  153.     MagicStrings.Append (inName, inFile);
  154.     MagicStrings.Assign (inPath, outPath); 
  155.     mtDir.DelTail (outPath);
  156.     MagicStrings.Append ('*.COD', outPath);
  157.     mtDir.Replace (inName, '*.COD', outName);
  158.     mtAppl.MouseOn;
  159.     IF mtDir.GetDir (outPath, outName, 'Codedatei w„hlen') THEN
  160.      mtAppl.MouseBusy;
  161.      MagicStrings.Assign (outPath, outFile);
  162.      mtDir.DelTail (outFile);
  163.      MagicStrings.Append (outName, outFile);
  164.    
  165.      (* Resource-Array l”schen *)
  166.      FOR i:= 0 TO 07FFFH DO  Resource[i]:= 0;  END;
  167.  
  168.      (* Resource lesen *)
  169.      mtFiles.OpenFile (inFile, in);
  170.      IF in > 0 THEN
  171.       inBytes:= LONG (0FFFFH); (* Max 64kb *)
  172.       mtFiles.ReadFile (in, inBytes, SYSTEM.ADR(Resource));
  173.       mtFiles.CloseFile (in);
  174.      END; 
  175.  
  176.      (* Eventuell vorhandenes File l”schen *)
  177.      b:= MagicDOS.Fdelete (outFile);
  178.    
  179.      (* Codefile erzeugen *)
  180.      IF mtTextfiles.OpenTextfile (outFile, mtTextfiles.WRITE, 20480, out) THEN
  181.       WriteLine ('(*----------------------------------------------------------------------*', TRUE);
  182.       WriteLine (' *        Resource-Coder 1.03  (C)92 by Peter Hellinger Software        *', TRUE);
  183.       WriteLine (' *----------------------------------------------------------------------*', TRUE);
  184.       WriteLine (' *           Inline-Resource erzeugt am ', FALSE);
  185.       mtTime.DateString (MagicDOS.Tgetdate (), str);  WriteLine (str, FALSE);
  186.       WriteLine (' ', FALSE);
  187.       mtTime.TimeString (MagicDOS.Tgettime (), str);  WriteLine (str, FALSE);
  188.       WriteLine ('             *', TRUE);
  189.       WriteLine (' *----------------------------------------------------------------------*)', TRUE);
  190.       WriteLine (' ', TRUE);
  191.     
  192.       IF compiler = mm2 THEN
  193.        (* Typ schreiben *)
  194.        WriteLine ('TYPE tRscData = ARRAY [0..', FALSE);
  195.        mtTextfiles.WriteCard (out, Resource[17] DIV 2, 0);
  196.        WriteLine ('] OF CARDINAL;', TRUE);  WriteLine (' ', TRUE);
  197.  
  198.        (* Daten schreiben *)
  199.        WriteLine ('CONST RscData = tRscData {', TRUE);
  200.  
  201.        j:= 0;  n:= 0;
  202.        LOOP
  203.         IF j > Resource[17] THEN  EXIT  END;
  204.         WriteLine ('        ', FALSE);
  205.         FOR i:= 0 TO 8 DO
  206.          IF j > Resource[17] THEN  EXIT  END;
  207.          WriteHex (Resource[n]);
  208.          IF j # Resource[17] THEN  WriteLine (', ', FALSE);  END;
  209.          INC (n);  INC (j, 2);
  210.         END; (* FOR *)
  211.         mtTextfiles.WriteLn (out);
  212.        END; (* LOOP *)
  213.        mtTextfiles.WriteLn (out);
  214.        WriteLine ('        }; (* Ende RscData *)', TRUE);
  215.  
  216.       ELSIF compiler = array THEN
  217.  
  218.        (* Typ schreiben *)
  219.        WriteLine ('VAR  RscData = ARRAY [0..', FALSE);
  220.        mtTextfiles.WriteCard (out, Resource[17] DIV 2, 0);
  221.        WriteLine ('] OF CARDINAL;', TRUE);  WriteLine (' ', TRUE);
  222.  
  223.        (* Daten schreiben *)
  224.        WriteLine ('PROCEDURE InitRscData;', TRUE);
  225.        WriteLine ('BEGIN', TRUE);
  226.  
  227.        j:= 0;  n:= 0;
  228.        LOOP
  229.         IF j > Resource[17] THEN  EXIT  END;
  230.         WriteLine (' RscData[', FALSE);
  231.         mtTextfiles.WriteCard (out, n, 0);
  232.         WriteLine (']:= ', FALSE);
  233.         WriteHex (Resource[n]);
  234.         WriteLine ('; ', TRUE);
  235.         INC (n);  INC (j, 2);
  236.        END; (* LOOP *)
  237.        WriteLine ('END InitRscData;', TRUE);
  238.  
  239.       ELSE
  240.        IF compiler = tdi THEN
  241.         (* Prozedur schreiben *)
  242.         WriteLine ('(*$S-, $T-, $P-*)', TRUE);
  243.        END;
  244.        
  245.        WriteLine ('PROCEDURE RscData;', TRUE);
  246.        WriteLine ('BEGIN', TRUE);
  247.        j:= 0;  n:= 0;
  248.        LOOP
  249.         IF j > Resource[17] THEN  EXIT  END;
  250.         IF compiler = tdi THEN  WriteLine (' CODE (', FALSE);
  251.                           ELSE  WriteLine (' INLINE (', FALSE);
  252.         END;
  253.         FOR i:= 0 TO 7 DO
  254.          IF j > Resource[17] THEN  EXIT  END;
  255.          WriteHex (Resource[n]);
  256.           IF (j # Resource[17]) AND (i # 7) THEN
  257.           WriteLine (', ', FALSE);
  258.          ELSIF i = 7 THEN
  259.           WriteLine (');', FALSE);
  260.          END;
  261.          INC (n); INC (j, 2);
  262.         END; (* FOR *)
  263.         mtTextfiles.WriteLn (out);
  264.        END; (* LOOP *)
  265.        WriteLine (');', TRUE);
  266.        WriteLine ('END RscData;', TRUE);
  267.        IF compiler = tdi THEN  WriteLine ('(*$S=, $T=, $P=*)', TRUE);  END;
  268.        
  269.       END; (* IF compiler *)
  270.       WriteLine ('(*----------------------------------------------------------------------*)', TRUE);
  271.       mtTextfiles.CloseTextfile (out);
  272.      END; (* Opentextfile *)
  273.     END; (* IF GetDir *)
  274.    END; (* IF GetDir *)
  275.    EXCL (main^[objc].obState, MagicAES.SELECTED);
  276.    mtDials.DialDraw (main, objc, 0, clip, FALSE);
  277.   END; (* IF objc = Formm2 *)
  278.  END; (* LOOP *)
  279.  mtDials.DialForm (main, mtDials.DSHRINK, rect, clip);
  280.  mtDials.DialForm (main, mtDials.DFINISH, clip, clip);
  281.  MagicAES.WindUpdate (MagicAES.ENDUPDATE);
  282.  mtAppl.ApplTerm (0);
  283. END RscCoder.
  284.  
  285.